Https、TLS/SSL、证书的理解
date
May 20, 2019
slug
Https、TLS|SSL、证书的理解
status
Published
tags
开发相关
summary
type
Post
- Https是什么?维基百科
超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。
- 什么是TLS/SSL? 维基百科
传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
所以TLS/SSL是传输层协议,http协议在其之上,发展历程为:SSL1.0,SSL2.0,SSL3.0,TLS1.0,TLS1.1,TLS1.2,TLS1.3,其中TLS1.1以前的版本已启用,TLS1.1于2020年弃用
- 什么是证书?
证书是证书签发机构(CA)对申请者签发的一样介质,里面有申请者的公钥、邮箱、姓名等信息;申请者向CA申请证书时,CA生成证书的过程实质就是用自己的秘钥(加密秘钥)对申请者信息进行非对称加密。当然,也可以自己给自己签发证书,但是浏览器和操作系统不信任自签发证书,操作系统和浏览器都会内置信任的根证书签发机构公钥(解密秘钥),以便对证书进行验证。
- https的请求流程:
- 客户端发起请求
- 服务端根据域名找到对应域名的证书(服务端通过SNI可以知道客户端要请求的域名,这个过程发生在https握手前)
- 服务端返回证书给客户端
- 客户端用内置的信任的根证书公钥验证(非对称解密)服务端的证书;如果验证失败,证明收到的服务端证书过期或者不受信任(中间人攻击);如果验证成功,则得到服务端的公钥,然后本地生成随机字符串作为客户端的key,然后用服务端公钥加密该key
- 将加密后的key回传给服务端
- 服务端解密得到客户端的key,用客户端key进行传输内容进行加密(这里是对称加密了)
- 返回加密内容给客户端
- 客户端用key解密服务端的加密内容
其实整个https过程就是通过非对称加密通信约定双方通信的对称加密秘钥,然后后面的通信全部基于对称加密,非对称加密虽然安全,但耗时耗资源,每一次传输都使用非对称加密无论是对客户端还是服务端都是不小的压力。
下面用wireshark来抓包看一下TLS的握手流程: